/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.ModeloCandidato;
import com.ipartek.formacion.gestformwww.modelo.ModeloConvocatoria;
import com.ipartek.formacion.gestformwww.modelo.beans.Candidato;
import com.ipartek.formacion.gestformwww.modelo.beans.Convocatoria;
import com.ipartek.formacion.gestformwww.modelo.beans.FiltroCandidato;
import com.ipartek.formacion.gestformwww.modelo.beans.FiltroConvocatoria;
import com.ipartek.formacion.gestformwww.modelo.beans.TipoCurso;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import java.util.ArrayList;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Jorge y Ainara
 */
public class ListarConvocatoriaAccion implements Accion {

    /**
     * Descripción: ejecuta la acción de listado de los convocatorias
     * @param servlet
     * @param request
     * @param response
     * @return devuelve el router que dirige a la página que corresponda (a Inicio o a Principal)
     */


    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) {
        HttpSession sesion = request.getSession();
        ArrayList<Convocatoria> convocatorias = null;
        AccionRouter router;
       
        int numPags;
        FiltroConvocatoria filtro = null;
        int numeroconvocatorias = 0;
        
        
        ModeloConvocatoria modelo = (ModeloConvocatoria) servlet.getServletContext().getAttribute("ModeloConvocatoria");
        ResourceBundle bundle = (ResourceBundle) servlet.getServletContext().getAttribute("acciones-mapeo");

        
        ArrayList<Candidato> candidatos = null;
        ModeloCandidato modeloCandidato=(ModeloCandidato) servlet.getServletContext().getAttribute("ModeloCandidato");
        

        ArrayList<TipoCurso> tiposcurso = null;
        if (sesion.getAttribute("usuario") != null) { //Si esta logeado
            if (sesion.getAttribute("filtroconvocatorias") != null) {
                filtro = (FiltroConvocatoria) sesion.getAttribute("filtroconvocatorias");
            } else {
                filtro = new FiltroConvocatoria(bundle);
            }
            
            //Definir los parametros del filtro en funcion de las cajas y los atributos de FiltroConvocatoria
            filtro.setNombre(request.getParameter("filtroNombreCurso"));
            filtro.setEstado(request.getParameter("filtroEstado"));
            filtro.setTipo(request.getParameter("filtroTipoCurso"));
            filtro.setFechainiciocom(request.getParameter("filtroFInicio"));
            filtro.setFechainiciofin(request.getParameter("filtroFInicioFin"));
            filtro.setFechafincom(request.getParameter("filtroFFin"));
            filtro.setFechafinfin(request.getParameter("filtroFFinFin"));
            filtro.setLugar(request.getParameter("filtroLugar"));
            filtro.setDuracion(request.getParameter("filtroDuracion"));
            //Estado de las convocatorias: Activas o Inactivas
            filtro.setEstado(request.getParameter("estado"));

            filtro.setColumnafiltrar(request.getParameter("filtroColumna"));
            filtro.setOrden(request.getParameter("filtroOrden"));
            filtro.setElementospag(request.getParameter("RegistroPagina"));
            filtro.setPagsiguiente(request.getParameter("id"));
            sesion.setAttribute("filtroconvocatorias", filtro);
            try {
                //Revisar que los nombres coincidan
                convocatorias = modelo.listarConvocatorias(filtro);
                numeroconvocatorias = modelo.contarConvocatorias(filtro);
                tiposcurso = modelo.listarTipoCurso();
               //
                
            } catch (GestorFormacionExcepcion ex) {
                Logger.getLogger(CrearCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                sesion.setAttribute("excepciones", ex.getMessage());
            }
                request.setAttribute("listarTipoCurso", tiposcurso);
                request.setAttribute("listaConvocatorias", convocatorias);

//            try {
//                candidatos = modeloCandidato.listarCandidatos(new FiltroCandidato(bundle));
//                request.setAttribute("listaCandidatos",candidatos);
//            } catch (GestorFormacionExcepcion ex) {
//                Logger.getLogger(ListarConvocatoriaAccion.class.getName()).log(Level.SEVERE, null, ex);
//            }

            numPags = filtro.getElementospag();
            //Para realizar la prueba hay que comentar este if
            if (numeroconvocatorias == 0) {
                ResourceBundle errores = (ResourceBundle) servlet.getServletContext().getAttribute("errores-mapeo");
                request.setAttribute("error", errores.getString("error-sin-resultados"));
            }
            request.setAttribute("numeroConvocatorias", numeroconvocatorias);
            //Contar el numero de paginas en funcion de el numero de convocatorias obtenido
            int totalpaginas = numeroconvocatorias / numPags;
            if ((numeroconvocatorias % numPags) != 0) {
                totalpaginas++;
            }
            //Guardar el total de paginas en la sesion
            request.setAttribute("totalPagConvocatorias", totalpaginas);
            //Guardar el include necesario en principal.jsp para visualizar la lista de convocatorias
            request.setAttribute("contenido", "lista-convocatoria");
            //Principal se encarga de visualizar todas las opciones en funcion del atributo de request "contenido"

            router = new AccionRouter("principal");
            //Parab realizar la prueba hay comentar el router "principal" y descomentar el de prueba
           // router=new AccionRouter("prueba");
        }else {
            //Si el usuario no esta logueado
            router = new AccionRouter("inicio", false);
        }
   
        return router;
    }

}
